#!/bin/bash

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FRONT_LOG_DIR="$SCRIPT_DIR/front_logs"
BACKEND_LOG_DIR="$SCRIPT_DIR/backend_logs"

echo "🛑 正在停止所有服务..."

# 定义后端监听端口
USER_BACKEND_PORT=8080
ADMIN_BACKEND_PORT=10010

# 函数：根据端口查找并杀死进程
kill_by_port() {
    local port=$1
    if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null; then
        echo "🔍 发现占用端口 $port 的进程..."
        pids=$(lsof -Ti :$port -t)
        kill $pids > /dev/null 2>&1 && echo "✅ 已停止监听端口 $port 的服务"
        sleep 1
        # 强制终止仍未退出的进程
        if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null; then
            kill -9 $pids > /dev/null 2>&1
            echo "⚠️  强制终止端口 $port 上的服务"
        fi
    fi
}

# 方法一：推荐 —— 按端口关闭（最可靠）
echo "🔌 正在关闭后端服务..."
kill_by_port $USER_BACKEND_PORT
kill_by_port $ADMIN_BACKEND_PORT

# 方法二：备用 —— 关闭所有疑似 Spring Boot 的 Java 进程（谨慎使用）
if pgrep -f "java.*spring-boot" > /dev/null; then
    echo "🔍 检测到其他 Spring Boot Java 进程..."
    pkill -f "java.*spring-boot"
    sleep 1
fi

# 停止 Nginx（如果由 systemd 管理）
if command -v systemctl &> /dev/null && systemctl is-active --quiet nginx; then
    sudo systemctl stop nginx
    echo "✅ Nginx 已停止"
elif ps aux | grep -v grep | grep -q "[n]ginx"; then
    echo "⚠️  Nginx 未通过 systemd 启动，尝试用 killall..."
    sudo killall nginx > /dev/null 2>&1 && echo "✅ Nginx 已停止"
else
    echo "🔍 Nginx 当前未运行"
fi

# 可选：清除日志
read -p "🗑️  是否清除日志文件？(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$FRONT_LOG_DIR"/*.log && echo "✅ 日志已清空"
    rm -f "$BACKEND_LOG_DIR"/*.log && echo "✅ 日志已清空"
fi

echo "👋 所有服务已安全停止。"
